package br.com.seuimovelnamao.dao;

import java.sql.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.seuimovelnamao.model.ContratacaoPlano;
import br.com.seuimovelnamao.model.Usuario;

public class ContratacaoPlanoDAO extends MasterDAO {

	public ContratacaoPlanoDAO(Session session) {
		super(session);
	}

	public ContratacaoPlano getContratacaoPlano(Long id){
		return (ContratacaoPlano) this.getSession().load(ContratacaoPlano.class, id);
	}
	
	public void remove(ContratacaoPlano cp){
		this.getSession().delete(cp);
	}
	
	public List<ContratacaoPlano> listaTudo(){
		return this.getSession().createCriteria(ContratacaoPlano.class).list();
	}
	
	public List<ContratacaoPlano> pagina(int inicio, int quantidade){
		return this.getSession().createCriteria(ContratacaoPlano.class).setMaxResults(quantidade).setFirstResult(inicio).list();
	}
	
	public boolean usuarioTemPlanoContratado(Usuario usuario){
		
		Query query = this.getSession().createQuery("SELECT cp FROM ContratacaoPlano AS cp WHERE cp.fim > :dataAtual AND usuario.id = :idUsuario");
		query.setParameter("dataAtual", new Date(System.currentTimeMillis()));
		query.setParameter("idUsuario", usuario.getId());
		
		return (query.list().size() > 0) ? true : false;
	}
	
	public ContratacaoPlano getContratacaoPlanoAtiva(Usuario usuario){
		
		Query query = this.getSession().createQuery("SELECT cp FROM ContratacaoPlano AS cp WHERE cp.fim > :dataAtual AND usuario.id = :idUsuario");
		ContratacaoPlano cp = (ContratacaoPlano)query.setParameter("dataAtual", new Date(System.currentTimeMillis())).setParameter("idUsuario", usuario.getId()).uniqueResult();
		
		return cp;
	}

}